<template>
  <el-card shadow="always" :body-style="{ padding: '20px' }">
    <!-- 标题 -->
    <div slot="header">用户基本信息</div>
    <!-- 内容 -- 表单 -->
    <el-form
      :model="userInfo"
      ref="fm"
      :rules="userFormRules"
      label-width="100px"
    >
      <!-- 登录名称 -->
      <el-form-item label="登录名称">
        <el-input v-model="userInfo.username"></el-input>
      </el-form-item>
      <!-- 用户昵称 -->
      <el-form-item label="用户昵称" prop="nickname">
        <el-input v-model="userInfo.nickname"></el-input>
      </el-form-item>
      <!-- 用户邮箱 -->
      <el-form-item label="用户邮箱" prop="email">
        <el-input v-model="userInfo.email"></el-input>
      </el-form-item>
      <!-- 操作按钮 -->
      <el-form-item>
        <el-button type="primary" @click="updateUser">提交修改</el-button>
        <el-button @click="reset">重置</el-button>
      </el-form-item>
    </el-form>

    <!-- card body -->
  </el-card>
</template>

<script>
import { updateUserInfoApi } from '@/api/user'
export default {
  data () {
    return {
      // userInfo: {
      //   username: '',
      //   nickname: '',
      //   email: ''
      // },
      // userInfo: this.$store.state.user.userInfo,
      userInfo: {},
      userFormRules: {
        nickname: [
          { required: true, message: '请输入用户昵称', trigger: 'blur' },
          { pattern: /^\S{2,10}$/, message: '昵称必须是2-10位的非空字符串', trigger: 'blur' }
        ],
        email: [
          { required: true, message: '请输入用户邮箱', trigger: 'blur' },
          { type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
        ]
      }
    }
  },
  methods: {
    updateUser () {
      this.$refs.fm.valitate(async (isOk) => {
        if (isOk) {
          // 校验通过
          // this.userInfo 把要修改的最新用户信息传给后台
          await updateUserInfoApi(this.userInfo)
          this.$message.success('修改成功')
          // 因为vuex存的还是没修改之前的=》需要更新
          this.$store.dispatch('user/getUserAction')
        }
      })
    },
    // 重置表单数据
    reset () {
      this.$refs.fm.resetFields()
    }
  },
  watch: {
    // 同步vuex数据给组件变量userInfo使用
    // 说明：刷新问题解决了，但是切页面不行
    // '$store.state.user.userInfo' (newValue) {
    //   console.log('监听vuex的userInfo变量变化：', newValue)
    //   this.userInfo = newValue
    // }
    // 刷新和切换页面都没问题
    '$store.state.user.userInfo': {
      immediate: true, // 页面加载之后立马执行一次监听
      handler (newValue) {
        console.log('监听vuex的userInfo变量变化：', newValue)
        // this.userInfo = newValue
        // newValue和vuex中是有引用关系
        // ...newValue是浅拷贝
        this.userInfo = { ...newValue }
      }
    }
  }
}
</script>

<style lang="less" scoped>
</style>
